package org.dreamwork.jasmine2.engine;

import org.dreamwork.jasmine2.events.IChangeListener;
import org.dreamwork.jasmine2.events.EventException;
import org.dreamwork.jasmine2.web.IWebControl;

/**
 * 值可变对象
 *<p>值可变对象定义了一组接口用于监听对象特定属性变化的事件，由向该对象注册
 * 变化监听器来完成操作
 *
 * Created by IntelliJ IDEA.
 * User: seth
 * Date: 2009-7-22
 * Time: 13:37:28
 */
public interface IChangable {
    /**
     * 添加监听器
     * @param listener 监听器
     */
    void addChangeListener (IChangeListener listener);

    /**
     * 删除监听器
     * @param listener 监听器
     */
    void removeChangeListener (IChangeListener listener);

    /**
     * 当属性发生变化时触发事件
     * @param sender 事件触发者
     * @param attrName 属性名称
     * @param oldValue 变化前属性值
     * @param newValue 变化后属性值
     * @throws EventException 事件异常
     */
    void fireChange (IWebControl sender, String attrName, Object oldValue, Object newValue) throws EventException;

    /**
     * 获取所有监听器
     * @return 所有监听器
     */
    IChangeListener[] getChangeListeners ();
}